import axios from "axios"
import qs from "querystring"

const errorHandle = (status,info) => {
  switch(status){
    case 400:
      console.log("语义有误");
      break;
    case 401:
      console.log("服务器认证失败");
      break;
    case 403:
      console.log("服务器拒绝访问");
      break;
    case 404:
      console.log("地址错误");
      break;
    case 500:
      console.log("服务器遇到意外");
      break;
    case 502:
      console.log("服务器无响应");
      break;
    default:
      console.log(info);
      break;
  }
}

const instance = axios.create({
  timeout: 5000
})

instance.interceptors.request.use(
  config => {
    // 如果是post请求，并且不是json格式，则使用qs序列化数据
    if (config.method === "post" && 
        !config.headers['Content-Type']?.includes('application/json')) {
      config.data = qs.stringify(config.data);
    }
    return config;
  },
  error => Promise.reject(error)
)

instance.interceptors.response.use(
  response => response.status === 200 ? 
    Promise.resolve(response) : 
    Promise.reject(response),
  error => {
    const { response } = error;
    if (response) {
      errorHandle(response.status, response.info);
    } else {
      console.log("网络连接失败，请检查网络");
    }
    return Promise.reject(error);
  }
)

export default instance;
